﻿using System;
using System.Device.Location;
using SugarTank.Mobile.Helpers;

namespace SugarTank.Mobile.Managers.Contracts
{
    public interface IGeographicManager
    {
        /// <summary>
        /// Occurs when [geo watcher position changed].
        /// </summary>
        event EventHandler<EventArgs<GeoPositionChangedEventArgs<GeoCoordinate>>> GeoWatcherPositionChanged;

        /// <summary>
        /// Occurs when [geo watcher started].
        /// </summary>
        event EventHandler<EventArgs> GeoWatcherStarted;

        /// <summary>
        /// Occurs when [geo watcher stopped].
        /// </summary>
        event EventHandler<EventArgs> GeoWatcherStopped;

        /// <summary>
        /// Occurs when [geo watcher failed to start].
        /// </summary>
        event EventHandler<EventArgs> GeoWatcherFailedToStart;

        /// <summary>
        /// Occurs when [geo watcher status changed].
        /// </summary>
        event EventHandler<EventArgs<GeoPositionStatus>> GeoWatcherStatusChanged;

        /// <summary>
        /// Starts the geo watcher.
        /// </summary>
        /// <param name="movementThreshold">The movement threshold.</param>
        /// <param name="accuracy">The accuracy.</param>
        void StartGeoWatcher(double movementThreshold, GeoPositionAccuracy accuracy);

        /// <summary>
        /// Stops the geo watcher.
        /// </summary>
        void StopGeoWatcher();
    }
}
